161 research outputs found

    Scheduling and Compiling Rate-Synchronous Programs with End-To-End Latency Constraints

    Get PDF
    We present an extension of the synchronous-reactive model for specifying multi-rate systems. A set of periodically executed components and their communication dependencies are expressed in a Lustre-like programming language with features for load balancing, resource limiting, and specifying end-to-end latencies. The language abstracts from execution time and phase offsets. This permits simple clock typing rules and a stream-based semantics, but requires each component to execute within an overall base period. A program is compiled to a single periodic task in two stages. First, Integer Linear Programming is used to determine phase offsets using standard encodings for dependencies and load balancing, and a novel encoding for end-to-end latency. Second, a code generation scheme is adapted to produce step functions. As a result, components are synchronous relative to their respective rates, but not necessarily simultaneous relative to the base period. This approach has been implemented in a prototype compiler and validated on an industrial application

    Semantics of multi-mode DAE systems

    Get PDF
    Deliverable D.4.1.1 of the ITEA2 Modrio collaborative projectHybrid systems modelers exhibit a number of difficulties related to the mix of continuous and discrete dynamics and sensitivity to the discretization scheme. Modular modeling, where subsystems models can be simply assembled with no rework, calls for using Differential Algebraic Equations (DAE). In turn, DAE are strictly more difficult than ODE. They require sophisticated pre-processing using various notions of index before they can be submitted to a solver. In this report we study some fundamental issues raised by the modeling and simulation of hybrid systems involving DAEs. The objective of this work is to serve for the evolution and the design of future releases of the Modelica language for such systems. We focus on the following questions: * What is the proper notion of index for a hybrid DAE system? * What are the primitive statements needed for a DAE hybrid systems modeler? The differentiation index for DAE explicitly relies on everything being differentiable. Therefore, generalizations to hybrid systems must be done with caution. We propose relying on non-standard analysis for this. Non-standard analysis formalizes differential equations as discrete step transition systems with infinitesimal time basis. We can thus bring hybrid DAE systems to their nonstandard form, where the notion of difference index can be firmly used. From this study, general hints for future releases of Modelica can be drawn

    Compilation certifiée de SCADE/LUSTRE

    Get PDF
    Les langages synchrones sont apparus autour des annĂ©es quatre-vingt, en rĂ©ponse Ă  un besoin d avoir un modĂšle mathĂ©matique simple pour implĂ©menter des systĂšmes temps rĂ©el critiques. Dans ce modĂšle, le temps est dĂ©coupĂ© en instants discrets durant lesquels tous les composants du systĂšme reçoivent et produisent une donnĂ©e. Cette modĂ©lisation permet des raisonnements beaucoup plus simples en Ă©vitant de devoir prendre en compte le temps de calcul de chaque opĂ©ration. Dans le monde du logiciel critique, la fiabilitĂ© du matĂ©riel et de son fonctionnement sont primordiaux, et on accepte d ĂȘtre plus lent si on devient plus sĂ»r. Afin d augmenter cette fiabilitĂ©, plutĂŽt que de concevoir manuellement tout le systĂšme, on utilise des machines qui synthĂ©tisent automatiquement le systĂšme souhaitĂ© Ă  partir d une description la plus concise possible. Dans le cas du logiciel, ce mĂ©canisme s appelle la compilation, et Ă©vite des erreurs introduites par l homme par inadvertance. Elle ne garantit cependant pas la bonne correspondance entre le systĂšme produit et la description donnĂ©e. Des travaux rĂ©cents menĂ©s par une Ă©quipe INRIA dirigĂ©e par Xavier Leroy ont abouti en 2008 au compilateur CompCert d un sous-ensemble large de C vers l assembleur PowerPC pour lequel il a Ă©tĂ© prouvĂ© dans l assistant de preuve Coq que le code assembleur produit correspond bien Ă  la description en C du programme source. Un tel compilateur offre des garanties fortes de bonne correspondance entre le systĂšme synthĂ©tisĂ© et la description donnĂ©e. De plus, avec les compilateurs utilisĂ©s pour le temps rĂ©el critique, la plupart des optimisations sont dĂ©sactivĂ©es afin d Ă©viter les erreurs qui y sont liĂ©es. Dans CompCert, des optimisations elles aussi prouvĂ©es sont proposĂ©es, ce qui pourrait permettre ces passes dans la production de systĂšmes temps rĂ©el critiques sans en compromettre la fiabilitĂ©. Le but de cette thĂšse est d avoir une approche similaire mais spĂ©cifique Ă  un langage synchrone, donc plus appropriĂ© Ă  la description de systĂšmes temps rĂ©el critiques que ne l est le C. Un langage synchrone flots de donnĂ©es semblable Ă  Lustre, nommĂ© Ls, et un langage impĂ©ratif semblable au langage C, nommĂ© Obc y sont proposĂ©s ainsi que leur sĂ©mantique formelle et une chaĂźne de compilation avec des preuves de prĂ©servation de sĂ©mantique le long de cette chaĂźne.Synchronous languages first appeared during the 80 s, in order to provide a mathematical model for safety-critical systems. In this model, time is discrete. At each instant, all components of the system simultaneously receive and produce some data. This model allows simpler reasonning on the behaviour of the system, as it does not involve the time required for each of the operations for every component. In safety-critical systems, safety is the rule, so a poor performance behaviour can be allowed if it improves safety. In order to improve safety, rather than conceiving directly the system, machines are used to automatically design the system from a given concise description. In the case of software, this machine is called a compiler, and avoids issues due to some human inadvertence. But it does not ensure that the produced system and the description specification really show the same behaviour. Some recent work from an INRIA team lead by Xavier Leroy achieved in 2008 the realisation of the CompCert compiler from a large subset of C to PowerPC assembly, for which it was proven inside of the Coq proof assistant that the produced system fits its source description. Such a compiler offers strong guarantees that the produced system and its given description by the programmer really fit. Furthermore, most current compiler s optimizations are disabled when dealing with safety-critical systems in order to avoid tedious compilation errors that optimizations may introduce. Proofs for optimizations may allow their use in this domain without affecting the faith we could place in the compiler. The aim of this thesis is to follow a similar path, but this one on a language which would be more suited for safety-critical systems than the C programming language. Some dataflow synchronous programming language very similar to Lustre, called Ls is described with its formal semantics, as well as an imperative programming language similar to a subset of C called Obc. Furthermore some compilation process is described as well as some proofs that the semantics is preserved during the compilation process.PARIS11-SCD-Bib. Ă©lectronique (914719901) / SudocSudocFranceF

    Arguments cadencés dans un compilateur Lustre vérifié

    Get PDF
    National audienceLustre is a synchronous language for programming systems as block diagrams from which low-level imperative code is generated automatically. Recent work applies the Coq interactive proof assistant to specify a compiler from a core subset of Lustre to the Clight input language of CompCert from which assembly code is generated. The overall correctness proof connects the stream semantics of Lustre to the imperative semantics of the assembly code.Every stream in a Lustre program is associated with a static ‘clock’ that represents when it is active. Compilation transforms the clocks into conditional statements that control when the corresponding value are calculated. Previous work made the simplifying assumption that the inputs and outputs of any given block shared the same static clock. This paper describes one way to lift this restriction. It requires enriching the static typing rules for clocks and the semantic model, and, to satisfy the Clight semantics, adding a compilation pass to ensure that any variable passed to a function call has been initialized.Lustre est un langage synchrone pour programmer des systĂšmes avec des schĂ©mas-blocs desquels un code impĂ©ratif de bas niveau est gĂ©nĂ©rĂ© automatiquement. Des travaux rĂ©cents utilisent l'assistant de preuve Coq pour spĂ©cifier un compilateur d'un noyau de Lustre vers le langage Clight de CompCert pour ensuite gĂ©nĂ©rer du code assembleur.La preuve de correction de l'ensemble relie la sĂ©mantique de flots de Lustre avec la sĂ©mantique impĂ©rative du code assembleur. Chaque flot dans un programme Lustre est associĂ© avec une « horloge » statique qui reprĂ©sente ses instants d'activation. La compilation transforme les horloges en des instructions conditionnelles qui dĂ©terminent quand les valeurs associĂ©es sont calculĂ©es. Les travaux prĂ©cĂ©dents faisaient l'hypothĂšse simplificatrice que toutes les entrĂ©es et sorties d'un bloc partagent la mĂȘme horloge. Cet article dĂ©crit une façon de supprimer cette restriction. Elle exige d'abord d'enrichir les rĂšgles de typage des horloges et le modĂšle sĂ©mantique. Ensuite, pour satisfaire le modĂšle sĂ©mantique de Clight, on ajoute une Ă©tape de compilation pour assurer que chaque variable passĂ©e directement Ă  un appel de fonction a Ă©tĂ© initialisĂ©e

    Programmer le parallélisme avec des futures en Heptagon un langage synchrone flot de données et étude des réseaux de Kahn en vue d'une compilation synchrone

    Get PDF
    Les langages synchrones ont Ă©tĂ© fondĂ©s pour modĂ©liser et implĂ©menter les systĂšmes rĂ©actifs temps-rĂ©els critiques. Avec la complexitĂ© toujours croissante des systĂšmes contrĂŽlĂ©s, la vitesse d'exĂ©cution devient un critĂšre important. Nous sommes donc Ă  la recherche d'une exĂ©cution parallĂšle, combinant efficacitĂ© et sĂ»retĂ©.Les langages synchrones ont toujours intĂ©grĂ© la notion de parallĂ©lisme, mais ce, pour l'expressivitĂ© de la modĂ©lisation. Leurs compilations visent principalement les circuits ou la gĂ©nĂ©ration de code sĂ©quentiel. Tous ont une sĂ©mantique formelle, qui rend possible la distribution correcte du code. Mais la prĂ©servation de cette sĂ©mantique peut ĂȘtre un obstacle Ă  l'efficacitĂ© du code gĂ©nĂ©rĂ©, particuliĂšrement s'il est nĂ©cessaire de prĂ©server une notion d'instant global au systĂšme.Le modĂšle sĂ©mantique qui nous intĂ©resse est celui des rĂ©seaux de Kahn. Ces rĂ©seaux modĂ©lisent des calculateurs distribuĂ©s, communiquant au travers de files de taille non bornĂ©e. Dans ce cadre, la distribution ne demande aucune communication ni synchronisation supplĂ©mentaire. En considĂ©rant l'histoire des files de communication, la sĂ©mantique de Kahn permet de s'abstraire de l'exĂ©cution effective, tout en garantissant le dĂ©terminisme du calcul. Pour cela, chaque nƓud du rĂ©seau doit avoir une sĂ©mantique fonctionnelle continue.Le langage que nous dĂ©veloppons est Heptagon, un langage synchrone fonctionnel du premier ordre, dĂ©scendant de Lustre. Son compilateur est un prototype universitaire, apparentĂ© Ă  l'outil industriel Scade. GrĂące Ă  sa sĂ©mantique de Kahn, la distribution d'un programme Heptagon ne pose pas de question, son efficacitĂ© beaucoup plus.L'efficacitĂ© requiert de minimiser les synchronisations. Cela revĂȘt deux aspects non indĂ©pendants. Avoir un dĂ©couplage suffisant des calculs : il y a des dĂ©lais dans les dĂ©pendances entre calculs. Avoir une granularitĂ© importante des calculs : un fort ratio temps de calcul sur frĂ©quence de communication. Or la sĂ©mantique synchrone et les horloges d'un programme Heptagon reflĂštent exactement l'inverse. Elles permettent au programmeur de se contenter d'un dĂ©couplage d'un instant et Ă  chaque instant, au maximum une valeur est calculĂ©e. De plus, les instants sont typiquement courts, pour assurer que le systĂšme rĂ©agit rapidement.Des prĂ©cĂ©dents travaux sur le sujet, nous tirons deux constats.Le premier est que nous souhaitons le contrĂŽle du parallĂ©lisme par le programmeur, directement dans le code source. Il doit pouvoir maĂźtriser Ă  quels instants il y a communication ou synchronisation. La solution que nous proposons dans ce manuscrit est l'utilisation des futures dans Heptagon. Ils fournissent ce pouvoir au programmeur, tout en restant des annotations qui peuvent ĂȘtre supprimĂ©es sans changer la sĂ©mantique dĂ©notationnelle du programme.Le deuxiĂšme constat est que la question de la granularitĂ© des calculs est une question profonde, touchant en particulier aux questions de dĂ©pendance de donnĂ©es, de choix des horloges et de compilation modulaire. Heptagon, comme ses parents, restreint les rĂ©seaux de Kahn qui peuvent ĂȘtre Ă©crits, de telle sorte que ces trois questions se traitent sĂ©parĂ©ment. Pour mieux comprendre le lien entre ces Ă©lĂ©ments, nous revenons aux rĂ©seaux de Kahn. Notre principal rĂ©sultat est la dĂ©finition de la sous-classe des rĂ©seaux ordonnĂ©s rĂ©actifs. Ceux-ci sont les seuls pour lesquels nous pouvons dĂ©crire modulairement le comportement avec des horloges, sans restreindre les contextes d'appels. Ces rĂ©seaux ont une signature d'horloge en forme normale, qui maximise la granularitĂ©. Pour l'exprimer, nous introduisons les horloges entiĂšres, dĂ©crivant la communication de plusieurs valeurs en un seul instant. Nous appliquons ensuite nos rĂ©sultats pour voir sous un nouveau jour Heptagon, Signal, les politiques des objets de Lucid Synchrone, mais aussi proposer une analyse pleinement modulaire de Lucy-n langage synchrone le plus fidĂšle aux rĂ©seaux de Kahn.Synchronous languages are used to program critical reactive systems. Today, systems require to find a way to execute them safely and in parallel. Parallelism has always been part of synchronous langages, but for modeling purpose. Their formal semantics allow to distribute them, but preserving the semantics may be ressource costly and prevent good parallel execution.The Kahn networks model is of great interest. It models distributed computers, communicating through unbounded FIFOs, ensuring that the computed values are deterministic, without any need of added synchronization.We develop the langage Heptagon, a first order functional synchronous son of Lustre.The compiler is an academic prototype of the industrial tool Scade. Thanks to its Kahn semantics, it can be distributed. In order to be efficient, one need to maximize the decoupling of computations and maximize the computation granularity. However, synchronous langages allow for very tight computation coupling and usually require thin computation granularity to ensure reactivity of the system.We opt for two research directions. The first one is to give the control of the execution parallelism to the programer. To this mean, we add futures to the source langage Heptagon. They provide control over starting and end of parallel computations, while preserving the functional semantics. Moreover, we provide a compilation for embedded systems, using statically allocated memory. The second one is to study Kahn synchronous semantics to understand data dependencies and maximize granularity of the computations. This touches deeply to the synchronous languages, mixing the usually separated questions of causality and clock calculus. We define the class of reactive ordered Kahn networks. They are the one which may be modularly compiled and whose behavior may be expressed with a clock signature. Moreover, we show that their is a normal form for this signature, maximizing the granularity of the network. To express it, we extend clocks to integer clocks. Then we come back to the synchronous languages we know to understand how to use it. The result is fully used and explained on Lucy-n, the synchronous language closest to Kahn networks.PARIS11-SCD-Bib. Ă©lectronique (914719901) / SudocSudocFranceF

    ZĂ©lus: A Synchronous Language with ODEs

    Get PDF
    International audienceZĂ©lus is a new programming language for modeling systems that mix discrete logical time and continuous time behaviors. From a user's perspective, its main originality is to extend an existing Lustre-like synchronous language with Ordinary Differential Equations (ODEs). The extension is conservative: any synchronous program expressed as data-flow equations and hierarchical automata can be composed arbitrarily with ODEs in the same source code. A dedicated type system and causality analysis ensure that all discrete changes are aligned with zero-crossing events so that no side effects or discontinuities occur during integration. Programs are statically scheduled and translated into sequential code that, by construction, runs in bounded time and space. Compilation is effected by source-to-source translation into a small synchronous subset which is processed by a standard synchronous compiler architecture. The resultant code is paired with an off-the-shelf numeric solver. We show that it is possible to build a modeler for explicit hybrid systems Ă  la Simulink/Stateflow on top of an existing synchronous language, using it both as a semantic basis and as a target for code generation

    Soundness of the Quasi-Synchronous Abstraction

    Get PDF
    We study the link between real-time quasi-periodic architectures where computing units execute 'almost periodically' and the discrete-time quasi-synchronous abstraction that P. Caspi proposed for analyzing them. The simplicity of the abstraction is appealing: the only events are node activations; logical steps account for transmission delays; and no node may be activated more than twice between two successive activations of any other. The motivation is to verify properties of real-time distributed systems in the simpler discrete model.By formalizing the relation between quasi-periodic architectures and the quasi-synchronous abstraction using L. Lamport's happened before relation, we show that the abstraction is sound for systems of two nodes. After showing that the abstraction is not sound for general systems with three or more nodes, we give necessary and sufficient restrictions on communication topologies to recover soundness.L’abstraction quasi-synchrone proposée par P. Caspi permet de faciliter l’analyse de systèmes dits quasi-périodiques où des unités de calcul s’exécutent de manière presque périodique. La simplicité de cette abstraction est prometteuse: les seuls événements considérés sont les activations des nƓuds; les pas de temps logique représentent les délais de transmission; un nƓud ne peut pas être activé plus de deux fois entre deux activations d’un autre nƓud. Cette abstraction permet de vérifier des propriétés d’un système distribué temps-réel en utilisant un modèle discret plus simple.Dans cet article nous formalisons la relation entre les architectures quasi-périodiques et l’abstraction quasi-synchrone en utilisant la relation happened before introduite par L. Lam- port. Nous montrons que l’abstraction est valide pour des systèmes composés de deux nƓuds, mais que ce n’est en général pas le cas pour des systèmes de trois nƓuds ou plus. Nous donnons ensuite les restrictions nécessaires et suffisantes sur les topologies de communication pour assurer la validité de cette abstraction

    Sundials/ML: interfacing with numerical solvers

    Get PDF
    International audienceWe describe a comprehensive OCaml interface to the Sundials suite of numerical solvers (version 2.6.2). Noteworthy features include the treatment of the central vector data structure and benchmarking results

    Analyse de dépendance vérifiée pour un langage synchrone à flot de données

    Get PDF
    National audienceVélus est une formalisation d'un langage synchrone à flots de données et de sa compilation dans l'assistant de preuve Coq. Il inclut une définition de la sémantique dynamique du langage, un compilateur produisant du code impératif, et une preuve de bout en bout que le compilateur préserve la sémantique des programmes. Dans cet article, on spécifie dans Vélus la sémantique de deux structures d'activation présentes dans les compilateurs modernes : switch et déclarations locales. Ces nouvelles constructions nécessitent une adaptation de l'analyse statique de dépendance de Vélus, qui produit un graphe acyclique comme témoin de la bonne formation d'un programme. On utilise ce témoin pour construire un schéma d'induction propre aux programmes bien formés. Ce schéma permet de démontrer le déterminisme du modÚle sémantique dans Coq
    • 

    corecore